<?php
/**
 * Класс инициализации ресурсов, связанных с аутентификацией пользователя.
 */
class Workset_Application_Resource_Auth
extends Zend_Application_Resource_ResourceAbstract
implements Workset_Auth_Options_Interface {
	/**
	 * Значения по умолчанию, которые можно переопределить в файле конфигурации.
	 * 
	 * @var array
	 */
	protected static $_aDefaultOptions = array(
		self::OP_REGISTRY_DB			=> 'dbAdapter',

		self::OP_REMEMBER_COOKIE_NAME	=> 'remember',
		self::OP_REMEMBER_COUNT			=> 0,
		self::OP_REMEMBER_TIME			=> 2592000, // 30 суток.
		self::OP_AUTH_SECRET_KEY		=> 'The secret key: k83sDaKl89j23lfsa9',

		self::OP_TABLE_USER				=> 'users',
		self::OP_FIELD_USER_ID			=> 'id',
		self::OP_FIELD_USER_LOGIN		=> 'login',
		self::OP_FIELD_USER_PASSWORD	=> 'password',
		self::OP_FIELD_USER_SECRETWORD	=> 'secret_word',
		self::OP_FIELD_USER_AUTHORIZED	=> 'authorized',
		self::OP_FIELD_USER_AUTHORIZED_IP	=> 'authorized_ip',
		self::OP_FIELD_USER_CREATED_IP		=> 'created_ip',
	);

	/**
	 * @var Workset_Auth
	 */
	protected $_oAuth = null;

	/**
	 * Инициализация объекта данного класса.
	 * 
	 * @param array|null $options
	 */
	public function __construct($options = null) {
		// Вызываем родительский метод.
		parent::__construct($options);

		// Проверяем наличие всех необходимых параметров и выставляем значения
		// поумолчанию, в случае необходимости.
		foreach (array_keys(self::$_aDefaultOptions) as $sKey) {
			if (!isset($this->_options[$sKey])) {
				$this->_options[$sKey] = self::$_aDefaultOptions[$sKey];
			}

			// Приведение к нужному типу.
			switch (TRUE) {
				case is_integer(self::$_aDefaultOptions[$sKey]):
					$this->_options[$sKey] = (integer)$this->_options[$sKey];
					break;

				case is_string(self::$_aDefaultOptions[$sKey]):
					$this->_options[$sKey] = (string)$this->_options[$sKey];
					break;

				case is_array(self::$_aDefaultOptions[$sKey]):
					$this->_options[$sKey] = (array)$this->_options[$sKey];
					break;

				case is_bool(self::$_aDefaultOptions[$sKey]):
					$this->_options[$sKey] = $this->_options[$sKey] === true
						|| $this->_options[$sKey] == 1
						|| in_array(strtolower($this->_options[$sKey]),array('true','on'),true);
					break;
			}
		}
	}

	/**
	 * Инициализация объекта ресурса.
	 *
	 * @see library/Zend/Application/Resource/Zend_Application_Resource_Resource#init()
	 * @return Workset_Auth
	 */
	public function init() {
		return $this->getAuth();
	}

	/**
	 * Получение объекта аутентификации.
	 * 
	 * @return Workset_Auth
	 */
	public function getAuth() {
		if ($this->_oAuth === null) {
			// Проводим инициализацию объекта аутентификации.
			$this->_oAuth = Workset_Auth::getInstance();
			$this->_oAuth->setStorage(new Zend_Auth_Storage_Session());
			$this->_oAuth->setOptions($this->getOptions());
		}

		return $this->_oAuth;
	}
}
?>